import java.util.Arrays;

public class SeqList {
    private int[] array;//顺序表存放数据的数组
    private int size;//顺序表长度
    public  SeqList() {
        this.array = new int[10];//默认大小为10
    }//无参数的构造方法
    public  SeqList(int size) {
        this.array = new int[size];
    }//有参数的构造方法，可以初始化顺序表长度
    //尾插法
    public void addList(int date){
        //先判断数组是否满了
        if(size == array.length) {
            this.array = Arrays.copyOf(this.array,2*this.array.length);
        }
        array[size] = date;
        size++;
    }
    //打印顺序表
    public void display() {
        for (int i = 0;i < size;i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }
    //在pos位置插入元素
    public void add(int pos,int date) throws PosException {
        //先判断数组是否满了
        if(size == array.length) {
            this.array = Arrays.copyOf(this.array,2*this.array.length);
        }
        if(pos < 0 || pos > array.length-1) {
            try{
                throw new PosException();
            } catch (PosException e){
                e.PosEception();
            }
        }
        if(size == 0) {
            array[size] = date;
            size++;
        }else if(pos > 0 && pos < size-1) {
            for (int i = size-1; i >= pos; i--) {
                array[i-1] = array[i];
            }
            array[pos] = date;
            size++;
        }
        //pos位置大于数组长度，使用尾插法
        else if(pos > size){
            addList(date);
        }
        //插入元素
        else {
            array[pos] = date;
            size++;
        }
    }
    //删除元素
    public void delete(int pos) {
        if(isEmpty()) {
            System.out.println("数组为空...");
        }else if (pos >= size || pos < 0) {
            System.out.println("不存在此元素");
        } else if (pos == size-1) {
            size--;
        } else {
            for (int i = pos; i < size-1; i++) {
                array[i] = array[i+1];
            }
            size--;
        }

    }
    //修改pos位置元素为value
    public void set(int pos,int value) {
        if(isEmpty()) {
            System.out.println("数组为空...");
        } else if (pos >= size || pos < 0) {
            System.out.println("不存在此元素");
        } else{
            array[pos] = value;
        }
    }
    //获取pos位置的元素
    public int get(int pos) {
       if(isEmpty()) {
           System.out.println("数组为空...");
           return 0;
       } else if (pos >= size || pos < 0) {
           System.out.println("不存在此元素");
           return 0;
       } else{
           System.out.println("存在元素，是"+array[pos]);
           return 1;
       }
    }
    //获取长度
    public int getSize(){
        return this.size;
    }
    //获取元素对应位置
    public int indexof(int date) {
        for (int i = 0; i<size;i++) {
            if(array[i] == date) {
                System.out.println("找到了,存在此元素位置是:"+ i);
                return i;
            }
        }
        System.out.println("没有此元素");
        return 0;
    }
    //判断是否存在元素
    public boolean isExist(int date) {
            for (int i = 0; i<size;i++) {
                if(array[i] == date) {
                    System.out.println("找到了,存在此元素");
                    return true;
                }
            }
            System.out.println("没有此元素");
            return false;
    }
    //判断数组是否为空
    public boolean isEmpty() {
        return size == 0;
    }
}
